import { take, put, all, fork, cancel, delay } from '../../redux-saga/effects';
import watcher_add from './counter';
import * as types from '../action-types';

// 测试 all
// function* add1() {
//     for (let i = 0; i < 3; i++) {
//         yield take(types.ASYNC_ADD);
//         yield put({ type: types.ADD });
//     }
//     return 'add1';
// }
// function* add2() {
//     for (let i = 0; i < 3; i++) {
//         yield take(types.ASYNC_ADD);
//         yield put({ type: types.ADD });
//     }
//     return 'add2';
// }

// function *rootSaga() {
//     let result = yield all([add1(), add2()]);
//     console.log('done', result); // ['add1', 'add2']
// }

// 测试cancel
function * add() {
    while(true) {
        yield delay(1000); // 每隔1s往下执行一次
        yield put({ type: types.ADD })
    }
}
function * addWatcher() {
    const task = yield fork(add);
    // 等待派发STOP_ADD这个动作，如果用户派发了，继续往下执行
    yield take(types.STOP_ADD);
    // 取消任务执行
    yield cancel(task);
}
function * rootSaga() {
    yield addWatcher();
}


// 测试takeEvery
// function *rootSaga() {
//     yield watcher_add();
// }

// 测试take和put
// 根saga，saga入口
// function *rootSaga() {
//     console.log('启动rootSaga')
//     while (true) {
//         // task监听动作：等待有人向仓库派发一个ASYNC_ADD这样的命令，等到了就继续执行，等不到就停在这里
//         yield take(types.ASYNC_ADD); // { type: 'TAKE', actionType: 'ASYNC_ADD' };
//         // put派发一个动作：store.dispatch({type: types.ADD})
//         yield put({ type: types.ADD }); // { type: 'PUT', action: { type: 'ADD' } }
//     }
// }

export default rootSaga;
